#include "Enumerable.h"

Enumerable::Enumerable()
{
	/// month && date

	month.insert("January");
	month.insert("February");
	month.insert("March");
	month.insert("April");
	month.insert("May");
	month.insert("June");
	month.insert("July");
	month.insert("Augest");
	month.insert("September");
	month.insert("October");
	month.insert("November");
	month.insert("December");

	date.insert("Monday");
	date.insert("Tuesday");
	date.insert("Wednesday");
	date.insert("Thursday");
	date.insert("Friday");
	date.insert("Saturday");
	date.insert("Sunday");

	/// cardinal number

	cardinal.insert("one");
	cardinal.insert("two");
	cardinal.insert("three");
	cardinal.insert("four"); // four fourteen
	cardinal.insert("five");
	cardinal.insert("six"); // six sixteen sixty
	cardinal.insert("seven"); // seven seventeen seventy
	cardinal.insert("eight"); // eight eighteen eighty
	cardinal.insert("nine"); // nine nineteen ninety
	cardinal.insert("ten"); // ten tens 

	cardinal.insert("eleven");
	cardinal.insert("twelve");
	cardinal.insert("thirteen"); // thirteen  thirty
	cardinal.insert("fifteen");

	cardinal.insert("twenty");
	cardinal.insert("thirty");
	cardinal.insert("forty");
	cardinal.insert("fifty");

	cardinal.insert("hundred");
	cardinal.insert("thousand");
	cardinal.insert("million");
	cardinal.insert("billion");
	cardinal.insert("trillion");

	/// UoM

	// weight
	UoM.insert("gram");
	UoM.insert("kilogram");
	UoM.insert("quintal");
	UoM.insert("ton");
	UoM.insert("pound");
	UoM.insert("ounce");

	// Linear Measure
	UoM.insert("meter");
	UoM.insert("kilometer");
	UoM.insert("centimeter");
	UoM.insert("millimeter");
	UoM.insert("yard");
	UoM.insert("foot");
	UoM.insert("inch");
	UoM.insert("mile");

	// Square Measure 
	UoM.insert("square meter");
	UoM.insert("square foot");
	UoM.insert("square yard");
	UoM.insert("hectare");

	// Cubic Measure
	UoM.insert("cubic meter");
	UoM.insert("cubic foot");
	UoM.insert("cubic yard");

	// Capacity Measure
	UoM.insert("litre");
	UoM.insert("millitre");
	UoM.insert("quart");
	UoM.insert("gallon");

	// others
	UoM.insert("calorie");
	UoM.insert("carat");
	UoM.insert("centigrade");
	UoM.insert("cord");
	UoM.insert("decibel");
	UoM.insert("denomination");
	UoM.insert("fathom");
	UoM.insert("lumen");
	UoM.insert("ream");
}

bool Enumerable::is_cardinal(const string& word)
{
	for( set<string>::iterator it = cardinal.begin(); 
		 it != cardinal.end(); it++ )
		if(true == fs_algo::startswith(word,*it))
			return true;

	return false;
}

bool Enumerable::is_UoM(const string& word)
{
	return UoM.find(word) != UoM.end();
}
